package eu.log;

import java.util.Collection;
import java.util.Date;

import eu.data.util.RollFetchDataSource;

/**
 * 日志存储设备类
 * @author 吴振振
 * @version 1.0 alpha
 */
public interface Storage {
	/**
	 * 将日志持久化
	 * @param log
	 */
	public void add(Log log);

	/**
	 * 新建一个适用于特定Storage的Log实体
	 */
	public Log newLog();
	
	/**
	 * 新建一个适用于特定Storage的Log实体,并使用参数指定的信息填充
	 */
	public Log newLog(String clientIdentity,String event,long time,Rank rank);
	/**
	 * 将日志批量持久化
	 * @param log
	 */
	public void add(Collection<Log> logs);


	/**
	 * 获取一个时间段里面的日志,包含起至时间
	 * @param start 起始时间
	 * @param end 结束时间
	 * @return 符合条件的日志滚动数据源
	 */
	public RollFetchDataSource<Log> getByPeriod(Date start, Date end);

	/**
	 * 获取一个时间段里面的日志,包含起至时间
	 * @param start 起始时间
	 * @param end 结束时间
	 * @return 符合条件的日志滚动数据源
	 */
	public RollFetchDataSource<Log> getByPeriod(long start, long end);

	/**
	 * 根据客户身份标识获取日志
	 * @param clientIdentity
	 * @return 符合条件的日志滚动数据源
	 */
	public RollFetchDataSource<Log> getByClient(String clientIdentity);

	/**
	 * 根据事件等级获取日志
	 * @param rank
	 * @return 符合条件的日志滚动数据源
	 */
	public RollFetchDataSource<Log> getByRank(Rank rank);
	
	/**
	 * 获取全部日志
	 * @param rank
	 * @return 符合条件的日志滚动数据源
	 */
	public RollFetchDataSource<Log> getAll();

	/**
	 * 关闭,进行资源清理
	 */
	public void close();
}
